package 链表;

public class LC_707设计链表 {
    class MyLinkedList {
        public static void main(String[] args){

            System.out.println();
        }
        public static class ListNode {
            int val;
            ListNode next;

            ListNode() {
            }

            ListNode(int val) {
        this.val = val;
    }

            ListNode(int val, ListNode next) {
                this.val = val;
                this.next = next;
            }
        }

        int size;
        ListNode head;
        public MyLinkedList() {
            size=0;
            head=new ListNode(0);
        }

        //获取下表为index节点的值
        public int get(int index) {
            if(index<0||index>=size)
                return -1;
            ListNode pre=head.next;//注意是next
            for(int i=0;i<index;i++){
                pre=pre.next;
            }
            return pre.val;
        }

        //头插法
        public void addAtHead(int val) {
            addAtIndex(0,val);
        }

        //尾插法
        public void addAtTail(int val) {
            addAtIndex(size,val);
        }

        //插入指定位置值
        public void addAtIndex(int index, int val) {
            if(index>size)
                return;
            if(index<0)
                index=0;
            ListNode pre=head;
            for(int i=0;i<index;i++){
                pre=pre.next;
            }
            ListNode cur=new ListNode(val);
            cur.next=pre.next;
            pre.next=cur;
            size++;
        }

        public void deleteAtIndex(int index) {
            if(index<0||index>=size)
                return;
            ListNode pre=head;
            for(int i=0;i<index;i++){
                pre=pre.next;
            }
            pre.next=pre.next.next;
            size--;
        }
    }
}
